<?php

class PasswordHelper
{
    /**
     * 生成密码的哈希值
     *
     * @param string $password 原始密码
     * @param int $cost 哈希计算成本（默认10，建议范围10-15）
     * @return string 返回生成的哈希密码
     */
    public static function hashPassword(string $password): string
    {

        // 手动生成盐值
        $salt = bin2hex(random_bytes(16));
        //echo "Salt: " . $salt . PHP_EOL;

        // 加盐并加密
        $hashedPassword = hash('sha256', $salt . $password);
      /*  echo "Hashed Password with Salt: " . $hashedPassword . PHP_EOL;

        // 验证密码（需保存盐值）
        $inputPassword = "user_password";
        if (hash('sha256', $salt . $inputPassword) === $hashedPassword) {
            echo "Password is valid!" . PHP_EOL;
        } else {
            echo "Invalid password." . PHP_EOL;
        }

        if ($hashedPassword === false) {
            throw new RuntimeException("密码哈希失败");
        }*/

        return $salt.":".$hashedPassword;
    }

    //获得密码和盐，返回加密后的内容
    public static function verifyPasswordBySalt(string $salt,string $password): string
    {
        // 加盐并加密
        $saltingPassword = hash('sha256', $salt . $password);

        return $saltingPassword;
    }

    /**
     * 截取：号前的字符串
     *
     * @param string $password 加盐后的密码
     */
    public static function analysisSalt(string $password): string
    {

        // 找到指定字符的位置,截取：之前的字符串prefix
        $prefix = strpos($password, ":");

        $salt = null;
        if ($prefix !== false) {
            // 截取指定字符之前的部分
            $salt = substr($password, 0, $prefix);
        }
        return $salt;
    }

    /**
     * 截取：号后的字符串
     *
     * @param string $password 加盐后的密码
     */

    public static function analysisPassword(string $password): string
    {
        // 找到指定字符的位置,截取：之前的字符串prefix
        $suffix = explode(":",$password);
        $pass = $suffix[1]; // 获取分隔符后面的部分 "world"
        return $pass;
    }

}
?>
